module(..., package.seeall)

function create_style(v)
    local s = lvgl.style_t()

    lvgl.style_init(s)

    -- 设置背景
    if v.bg then s = set_bg(s, v.bg) end
    -- 设置边框
    if v.border then s = set_border(s, v.border) end
    -- 设置外框线
    if v.outline then s = set_outline(s, v.outline) end
    -- 设置阴影
    if v.shadow then s = set_shadow(s, v.shadow) end

    -- -- 设置文字样式
    if v.text then s = set_text(s, v.text) end
    return s
end

function create(p, v)
    local obj = lvgl.msgbox_create(p, nil)
    lvgl.obj_set_size(obj, v.W or 400, v.H or 800)

    lvgl.msgbox_set_text(obj, v.msg_text or "消息框")
    if v.btns then lvgl.msgbox_add_btns(obj, v.btns) end
    -- 设置动画时间
    lvgl.msgbox_set_anim_time(obj, v.anim_time or 1000)

    if v.event then lvgl.obj_set_click(obj, v.event) end

    -- 自动关闭时间
    if v.auto_close then lvgl.msgbox_start_auto_close(obj, v.auto_close) end
    -- 消息框的主要部分称为 LV_MSGBOX_PART_MAIN ，它使用所有典型的背景样式属性。
    -- 使用填充会增加侧面的空间。pad_inner将在文本和按钮之间添加空格。标签样式属性会影响文本样式。
    -- 按钮部分与 按钮矩阵(lv_imgbtn) 的情况相同：
    -- LV_MSGBOX_PART_BTN_BG 按钮的背景
    -- LV_MSGBOX_PART_BTN 按钮

    if v.bg then
        lvgl.obj_add_style(obj, lvgl.MSGBOX_PART_MAIN, create_style(v.bg))
    end

    if v.btn then
        lvgl.obj_add_style(obj, lvgl.MSGBOX_PART_MAIN, create_style(v.btn))
    end

    lvgl.obj_align(obj, v.align_to, v.align or lvgl.ALIGN_CENTER,
                   v.align_x or 0, v.align_y or 40)

    return obj
end

-- create(lvgl.scr_act(), {
--     btns = {"Apple", "Close", "Close", "Close", "Close", ""},
--     msg_text = "密码错误\n",
--     align = lvgl.ALIGN_CENTER,
--     bg = {
--         font = style.font24,
--         border = {color = 0x0ff00f, width = 10, opa = 200},
--         shadow = {spread = 10, width = 10, color = 0xff00f0},
--         line = {color = 0xafccfc, width = 30, opa = 255, rounded = false},
--         outline = {color = 0xff0000, opa = 100, width = 20},
--         bg = {
--             radius = 100,
--             color = 0x0f0ff0,
--             opa = 250,
--             grad = {color = 0x0f0f0f, main = 60, grad = 300}
--         }
--     },
--     anim_time = 1000
-- })

